#include "RL_VK36N16I.h"

VK36N16I_TOUCH::VK36N16I_TOUCH(uint8_t address) : _address(address) {}

bool VK36N16I_TOUCH::begin() {
    Wire.begin();
    return true;
}

String VK36N16I_TOUCH::getKeys() {
    uint8_t data[2];
    String keys = "";
    
    // 从I2C设备读取2字节数据
    Wire.requestFrom(_address, (uint8_t)2);
    
    // 检查是否成功读取到数据
    if (Wire.available() != 2) {
        return ""; // 读取失败返回空字符串
    }
    
    // 读取数据到缓冲区
    data[0] = Wire.read();
    data[1] = Wire.read();
    
    // 解析第一个字节的按键
    for (int i = 0; i < 8; i++) {
        if (data[0] & (1 << i)) {
            keys += _keyMap[i];
        }
    }
    
    // 解析第二个字节的按键
    for (int i = 0; i < 8; i++) {
        if (data[1] & (1 << i)) {
            keys += _keyMap[i + 8];
        }
    }
    
    return keys;
}

bool VK36N16I_TOUCH::touchRead(uint16_t key) {
    uint8_t data[2];
    
    // 从I2C设备读取2字节数据
    Wire.requestFrom(_address, (uint8_t)2);
    
    // 检查是否成功读取到数据
    if (Wire.available() != 2) {
        return false; // 读取失败返回false
    }
    
    // 读取数据到缓冲区
    data[0] = Wire.read();
    data[1] = Wire.read();
    
    // 合并两个字节为一个16位值进行按键检测
    uint16_t keyData = (uint16_t)data[1] << 8 | data[0];
    
    return (keyData & key) != 0;
}    